package com.demo.springcloud.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import com.netflix.loadbalancer.RetryRule;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration   // 等价于一个Spring  applicationContext.xml配置文件
public class BeanConfig {
    /*是Spring用于同步client端的核心类，简化了与http服务的通信，并满足RestFul原则，
    程序代码可以给它提供URL，并提取结果。默认情况下，RestTemplate默认依赖jdk的HTTP连接工具。
    当然你也可以 通过setRequestFactory属性切换到不同的HTTP源，比如Apache HttpComponents、Netty和OkHttp。*/
    @LoadBalanced                     // 使用Ribbon实现负载均衡的调用
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

// 覆盖掉原来ribbon默认的轮询负载均衡策略
  // @Bean
    public IRule irule(){
        //return new RandomRule();   // 采用随机的负载均衡策略
        return new RetryRule();   // 采用重试的负载均衡策略
    }

}
